COO Communities
The primary geographic unit of this assessment is the census tract. As is the case with many communities, the census geographies do not coincide exactly with the formal geographic boundary of the study’s three sites, and should be considered as spatial approximations of these communities.
Listed below are the geographic identifiers of the census tracts that approximate each site.
| 53033010000 |
53033010001 |
53033026900 |
53033026600 |
53033026100 |
53033026200 |
| 53033010300 |
53033010300 |
53033026500 |
53033026700 |
53033026200 |
53033027300 |
| 53033010400 |
53033010401 |
53033026600 |
53033026500 |
53033026300 |
53033028000 |
| 53033011000 |
53033011001 |
53033026700 |
53033026801 |
53033026400 |
53033028100 |
| 53033011101 |
53033011002 |
53033026801 |
53033026802 |
53033027100 |
53033028300 |
| 53033011102 |
53033011101 |
53033026802 |
53033027000 |
53033027200 |
53033028402 |
| 53033011700 |
53033011102 |
53033027000 |
NA |
53033027300 |
53033028403 |
| 53033011800 |
53033011700 |
NA |
NA |
53033028000 |
53033028500 |
| 53033011900 |
53033011800 |
NA |
NA |
53033028100 |
53033028700 |
| NA |
53033011900 |
NA |
NA |
53033028200 |
53033028801 |
| NA |
NA |
NA |
NA |
53033028300 |
53033028802 |
| NA |
NA |
NA |
NA |
53033028402 |
53033029101 |
| NA |
NA |
NA |
NA |
53033028403 |
53033026100 |
| NA |
NA |
NA |
NA |
53033028500 |
53033026200 |
| NA |
NA |
NA |
NA |
53033028700 |
53033026300 |
| NA |
NA |
NA |
NA |
53033028801 |
53033026400 |
| NA |
NA |
NA |
NA |
53033028802 |
53033027100 |
| NA |
NA |
NA |
NA |
53033029100 |
53033027200 |
| NA |
NA |
NA |
NA |
NA |
53033027300 |
| NA |
NA |
NA |
NA |
NA |
53033028100 |
| NA |
NA |
NA |
NA |
NA |
53033028200 |
| NA |
NA |
NA |
NA |
NA |
53033028300 |
| NA |
NA |
NA |
NA |
NA |
53033028802 |
To create the community approximations, the tract boundaries of each community are merged and each of the census table estimates are aggregated. In addition to combining the estimates, this method also recalculates the standard error for each census table. It should be noted that this method is only valid for census tables representing count data.
LS0tCmRmX3ByaW50OiB0aWJibGUKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICBkZWZhdWx0CiAgcGRmX2RvY3VtZW50OgogICAga2VlcF90ZXg6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKYGBge3IgY2Vuc3VzLWFjcy1jb21tcy1zZXR1cCwgZWNobyA9IEZBTFNFLCB3YXJuaW5nPUZBTFNFLG1lc3NhZ2U9RkFMU0UsY29tbWVudD1GQUxTRX0KbGlicmFyeShwbHlyKQpsaWJyYXJ5KGtuaXRyKQpsaWJyYXJ5KHJwcm9qcm9vdCkKbGlicmFyeShyZ2RhbCkKbGlicmFyeShzcCkKbGlicmFyeShyZ2VvcykKbGlicmFyeSh0aWdyaXMpCmxpYnJhcnkobGVhZmxldCkKbGlicmFyeShnZ3RoZW1lcykKbGlicmFyeShtYWdyaXR0cikKbGlicmFyeShzdHJpbmdyKQpsaWJyYXJ5KGRvd25sb2FkZXIpCmxpYnJhcnkod2Vic2hvdCkKbGlicmFyeShodG1sdG9vbHMpCmxpYnJhcnkoZ3Bsb3RzKQpsaWJyYXJ5KGdnbWFwKQpsaWJyYXJ5KHNoaW55KQpsaWJyYXJ5KGh0bWx3aWRnZXRzKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShhY3MpCmxpYnJhcnkoUkNvbG9yQnJld2VyKQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShmb3JjYXRzKQpsaWJyYXJ5KG1pc2NnaXMpCmxpYnJhcnkob3BlcmF0b3IudG9vbHMpCmxpYnJhcnkobGVhZmxldC5leHRyYXMpCmxpYnJhcnkodmlyaWRpc0xpdGUpCmxpYnJhcnkoc2YpCnJvb3QgPC0gcnByb2pyb290Ojppc19yc3R1ZGlvX3Byb2plY3QKcm9vdF9maWxlIDwtIHJvb3QkbWFrZV9maXhfZmlsZSgpCm9wdHNfY2h1bmskc2V0KGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0UsIGNvbW1lbnQ9RkFMU0UpCgpgYGAKCmBgYHtyIGNlbnN1cy1hY3MtY29tbXMtY29sb3JzfQpncmVlbiA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbWyJncmVlbiJdXQpibHVlIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbImJsdWUiXV0Kb3JhbmdlIDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtbIm9yYW5nZSJdXQpyZWQgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1sicmVkIl1dCnRlYWwgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W1sidGVhbCJdXQpwYWxfcmdiXzQgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpCnBhbF9yZ2JfNCA8LSBtaXNjZ2lzOjptaXNjZ2lzX3BhbHMkdGFibGVhdV9jYXRbYygicmVkIiwiZ29sZCIsImdyZWVuIiwiYmx1ZSIpXSAlPiUgdW5saXN0ICU+JSBwYWxldHRlKCkKcGFsX3JnYl82IDwtIG1pc2NnaXM6Om1pc2NnaXNfcGFscyR0YWJsZWF1X2NhdFtjKCJyZWQiLCJnb2xkIiwiZ3JlZW4iLCJibHVlIiwib3JhbmdlIiwicHVycGxlIildICU+JSB1bmxpc3QgJT4lIHBhbGV0dGUoKQpwYWxfcmdiXzYgPC0gbWlzY2dpczo6bWlzY2dpc19wYWxzJHRhYmxlYXVfY2F0W2MoInJlZCIsImdvbGQiLCJncmVlbiIsImJsdWUiLCJvcmFuZ2UiLCJwdXJwbGUiKV0gJT4lIHVubGlzdCAlPiUgcGFsZXR0ZSgpCnByb2pfbGlnaHRfZ3JleSA8LSBjb2wyaGV4KCJncmV5NzUiKQpwcm9qX2dyZXkgPC0gY29sMmhleCgiZ3JleTUwIikKcHJval9kYXJrX2dyZXkgPC0gY29sMmhleCgiZ3JleTI1IikKCmBgYAoKCiMjIyBDT08gQ29tbXVuaXRpZXMgey19CgpUaGUgcHJpbWFyeSBnZW9ncmFwaGljIHVuaXQgb2YgdGhpcyBhc3Nlc3NtZW50IGlzIHRoZSBbY2Vuc3VzIHRyYWN0XShodHRwczovL3d3dy5jZW5zdXMuZ292L2dlby9yZWZlcmVuY2UvZ3RjL2d0Y19jdC5odG1sKS4gQXMgaXMgdGhlIGNhc2Ugd2l0aCBtYW55IGNvbW11bml0aWVzLCB0aGUgY2Vuc3VzIGdlb2dyYXBoaWVzIGRvIG5vdCBjb2luY2lkZSBleGFjdGx5IHdpdGggdGhlIGZvcm1hbCBnZW9ncmFwaGljIGJvdW5kYXJ5IG9mIHRoZSBzdHVkeSdzIHRocmVlIHNpdGVzLCBhbmQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgYXMgX3NwYXRpYWwgYXBwcm94aW1hdGlvbnNfIG9mIHRoZXNlIGNvbW11bml0aWVzLgoKTGlzdGVkIGJlbG93IGFyZSB0aGUgZ2VvZ3JhcGhpYyBpZGVudGlmaWVycyBvZiB0aGUgY2Vuc3VzIHRyYWN0cyB0aGF0IGFwcHJveGltYXRlIGVhY2ggc2l0ZS4KCmBgYHtyIGNlbnN1cy1hY3MtY29tbXMtZmlsZXMsIHJlc3VsdHM9ImFzaXMifQoKIyBDZW5zdXMgdHJhY3QgYm91bmRhcmllcyBmb3IgdGhlIDIwMTUgZGF0YQoKIyBSYWluaWVyIFZhbGxleQpydiA8LSBjKCI1MzAzMzAxMDAwMSIsICI1MzAzMzAxMDMwMCIsICI1MzAzMzAxMDQwMSIsICI1MzAzMzAxMTAwMSIsICI1MzAzMzAxMTAwMiIsICI1MzAzMzAxMTEwMSIsIjUzMDMzMDExMTAyIiwgIjUzMDMzMDExNzAwIiwgIjUzMDMzMDExODAwIiwgIjUzMDMzMDExOTAwIikKCiMgV2hpdGUgQ2VudGVyCndjIDwtIGMoIjUzMDMzMDI2NjAwIiwiNTMwMzMwMjY3MDAiLCI1MzAzMzAyNjUwMCIsIjUzMDMzMDI2ODAxIiwiNTMwMzMwMjY4MDIiLCI1MzAzMzAyNzAwMCIpCgojIFNlYVRhYy9UdWt3aWxhCgpzdGNfaHVzIDwtIHJlYWRfY3N2KHJvb3RfZmlsZSgnMS1kYXRhLzMtZXh0ZXJuYWwvbWFudWFsL3NlYXRhYy10ci9ERUNfMTBfU0YxX0gxL0RFQ18xMF9TRjFfSDFfd2l0aF9hbm4uY3N2JyksIAogICAgICAgICAgICAgICAgICAgIGNvbF90eXBlcyA9IGNvbHMoSWQyID0gY29sX2NoYXJhY3RlcigpKSwgc2tpcCA9IDEpCgp0dWtfaHVzIDwtIHJlYWRfY3N2KHJvb3RfZmlsZSgnMS1kYXRhLzMtZXh0ZXJuYWwvbWFudWFsL3R1a3dpbGEtdHIvREVDXzEwX1NGMV9IMS9ERUNfMTBfU0YxX0gxX3dpdGhfYW5uLmNzdicpLCAKICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZXMgPSBjb2xzKElkMiA9IGNvbF9jaGFyYWN0ZXIoKSksIAogICAgICAgICAgICAgICAgICAgIHNraXAgPSAxKQoKc3RjIDwtICBwYXN0ZShzdWJzdHIoeCA9IHN0Y19odXMkSWQyLDEsMiksc3Vic3RyKHggPSBzdGNfaHVzJElkMiw4LDE2KSxzZXAgPSAiIikKCnR1ayA8LSAgcGFzdGUoc3Vic3RyKHggPSB0dWtfaHVzJElkMiwxLDIpLHN1YnN0cih4ID0gdHVrX2h1cyRJZDIsOCwxNiksc2VwID0gIiIpCgpzdGN0dWsgPC0gYyhzdGMsdHVrKQoKIyBDZW5zdXMgdHJhY3QgYm91bmRhcmllcyBmb3IgdGhlIDIwMDkgZGF0YQoKaWYoIWV4aXN0cygnY3cnKSl7Y3cgPC0gcmVhZF9yZHMocm9vdF9maWxlKCcxLWRhdGEvNC1pbnRlcmltL2N3LTIwMDAtMjAxMC5yZHMnKSl9CgpnZXRfR0VPSUQyMDA5IDwtIGZ1bmN0aW9uKGdlb2lkc18yMDE1LCBjdyl7CiAgICAgICAgIyBicm93c2VyKCkKICAgICAgICBjdyAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoR0VPSURfMjAxMCAlaW4lIGdlb2lkc18yMDE1KSAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoV0VJR0hUID4gLjAxKSAlPiUKICAgICAgICAgICAgICAgIGV4dHJhY3QyKCdHRU9JRF8yMDAwJykgJT4lIHVuaXF1ZSgpCn0KCmlmKCFmaWxlLmV4aXN0cyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vY29vLWNvbW0tdHItZGYucmRzJykpKXsKICAgICAgICBsaXN0KAogICAgICAgICAgICAgICAgJ1JWXzIwMDknID0gZ2V0X0dFT0lEMjAwOShydixjdyksCiAgICAgICAgICAgICAgICAnUlZfMjAxNScgPSBydiwKICAgICAgICAgICAgICAgICdXQ18yMDA5JyA9IGdldF9HRU9JRDIwMDkod2MsY3cpLAogICAgICAgICAgICAgICAgJ1dDXzIwMTUnID0gd2MsCiAgICAgICAgICAgICAgICAnU1RLV18yMDA5JyA9IGdldF9HRU9JRDIwMDkoc3RjdHVrLGN3KSwKICAgICAgICAgICAgICAgICdTVEtXXzIwMTUnID0gc3RjdHVrCiAgICAgICAgKSAlPiUgCiAgICAgICAgICAgICAgICBtaXNjZ2lzOjpjYmluZF9maWxsKC4pICU+JQogICAgICAgICAgICAgICAgYXNfdGliYmxlKCkgJT4lCiAgICAgICAgICAgICAgICBzZXRfY29sbmFtZXMoCiAgICAgICAgICAgICAgICAgICAgICAgIGMoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaW5pZXIgVmFsbGV5ICgyMDA5KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJhaW5pZXIgVmFsbGV5ICgyMDE1KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldoaXRlIENlbnRlciAoMjAwOSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJXaGl0ZSBDZW50ZXIgKDIwMTUpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhVGFjL1R1a3dpbGEgKDIwMDkpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VhVGFjL1R1a3dpbGEgKDIwMTUpIgogICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICApICU+JSAKICAgICAgICAgICAgICAgIHdyaXRlX3Jkcyhyb290X2ZpbGUoJzEtZGF0YS80LWludGVyaW0vY29vLWNvbW0tdHItZGYucmRzJykpCn0KCnJlYWRfcmRzKHJvb3RfZmlsZSgnMS1kYXRhLzQtaW50ZXJpbS9jb28tY29tbS10ci1kZi5yZHMnKSkgJT4lIAogICAgICAgIGtuaXRyOjprYWJsZShjYXB0aW9uID0gIkNlbnN1cyBUcmFjdCBHRU9JRHMiKQoKYGBgCgpUbyBjcmVhdGUgdGhlIGNvbW11bml0eSBhcHByb3hpbWF0aW9ucywgdGhlIHRyYWN0IGJvdW5kYXJpZXMgb2YgZWFjaCBjb21tdW5pdHkgYXJlIG1lcmdlZCBhbmQgZWFjaCBvZiB0aGUgY2Vuc3VzIHRhYmxlIGVzdGltYXRlcyBhcmUgYWdncmVnYXRlZC4gSW4gYWRkaXRpb24gdG8gY29tYmluaW5nIHRoZSBlc3RpbWF0ZXMsIHRoaXMgbWV0aG9kIGFsc28gcmVjYWxjdWxhdGVzIHRoZSBzdGFuZGFyZCBlcnJvciBmb3IgZWFjaCBjZW5zdXMgdGFibGUuIEl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoaXMgbWV0aG9kIGlzIG9ubHkgdmFsaWQgZm9yIGNlbnN1cyB0YWJsZXMgcmVwcmVzZW50aW5nIGNvdW50IGRhdGEuXltUaGlzIGxpbWl0YXRpb24gaXMgbWFkZSBleHBsaWNpdCBieSB0aGUgYGFjc2AgcGFja2FnZSBjcmVhdG9yLCBFenJhIEhhYmVyIEdsZW5uLCBbaGVyZV0oaHR0cDovL2VnbGVubi5zY3JpcHRzLm1pdC5lZHUvY2l0eXN0YXRlLykuXQoKYGBge3IgY2Vuc3VzLWFjcy1jb21tcy1jb21iaW5lZC1nZW9tc30KCmlmKCFleGlzdHMoJ2Fjc19ub3JtbF9zZicpKXthY3Nfbm9ybWxfc2YgPC0gcmVhZF9yZHMocm9vdF9maWxlKCcuLzEtZGF0YS80LWludGVyaW0vY29vLWFjcy1ub3JtbC1zZi5yZHMnKSl9CgojIE5ldyBjb2x1bW5zOiBgQ09NTVVOSVRZYCBhbmQgYENPTU1NVU5JVFlfRlVMTGAKCnJ2NiA8LSBtYXBfY2hyKHJ2LHN0cl9zdWIsNiwxMSkKCndjNiA8LSBtYXBfY2hyKHdjLHN0cl9zdWIsNiwxMSkKCnN0Y3R1azYgPC0gbWFwX2NocihzdGN0dWssc3RyX3N1Yiw2LDExKQoKY29vNiA8LSBjKHJ2Nix3YzYsc3RjdHVrNikKCiMgQWdncmVnYXRpb24gZnVuY3Rpb24KYWdncmVnYXRlX2NvbW1zIDwtIGZ1bmN0aW9uKGNvbCl7CiAgICAgICAgCiAgICAgICAgY2xhc3MgPC0gY29sICU+JSBjbGFzcygpICU+JSB1bmlxdWUgJT4lIGV4dHJhY3QyKDEpCiAgICAgICAgCiAgICAgICAgIyBDSEFSQUNURVIgQ09MVU1OUwogICAgICAgIGlmKGNsYXNzICVpbiUgJ2NoYXJhY3Rlcicpe05BX2NoYXJhY3Rlcl8KICAgICAgICB9ZWxzZSAKICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIyBMT0dJQ0FMIENPTFVNTlMgCiAgICAgICAgICAgICAgICBpZihjbGFzcyAlaW4lICdsb2dpY2FsJyl7IE5BCiAgICAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgIyBTRkMgQ09MVU1OUyAKICAgICAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3MgJWluJSAnc2ZjX01VTFRJUE9MWUdPTicpeyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2wgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfdW5pb24gJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9jYXN0KCdNVUxUSVBPTFlHT04nKSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdF9idWZmZXIoLjAwMDAwMSkgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RfY2FzdCgnTVVMVElQT0xZR09OJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQUNTIENPTFVNTlMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihjbGFzcyAlaW4lICdsaXN0JyAmIGV4dHJhY3QyKGNvbCwxKSAlPiUgY2xhc3MgJWluJSAnYWNzJyl7IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sICU+JSByZWR1Y2Uoc3VwcHJlc3NXYXJuaW5ncyhyYmluZC5hY3MpKSAlPiUgYXBwbHkoMSxzdW0pICU+JSBsaXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQp9CgppZighZmlsZS5leGlzdHMocm9vdF9maWxlKCcuLzEtZGF0YS80LWludGVyaW0vYWNzX25vcm1sX2FsbF9nZW9tc19zZi5yZHMnKSkpewogICAgICAgIAogICAgICAgIGFjc19ub3JtbF9jb21tc19zZiA8LSAKICAgICAgICAgICAgICAgIGFjc19ub3JtbF9zZiAlPiUgCiAgICAgICAgICAgICAgICBtdXRhdGUoQ09NTVVOSVRZX0ZVTEwgPSBjYXNlX3doZW4oLiRHRU9JRDYgJWluJSBydjYgfiAnUmFpbmllciBWYWxsZXknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4kR0VPSUQ2ICVpbiUgd2M2IH4gJ1doaXRlIENlbnRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiRHRU9JRDYgJWluJSBzdGN0dWs2IH4gJ1NlYVRhYy9UdWt3aWxhJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgICAgICAgICAgICAgICAgQ09NTVVOSVRZID0gY2FzZV93aGVuKC4kR0VPSUQ2ICVpbiUgcnY2IH4gJ1JWJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLiRHRU9JRDYgJWluJSB3YzYgfiAnV0MnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJEdFT0lENiAlaW4lIHN0Y3R1azYgfiAnU1RLVycsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSkgJT4lIAogICAgICAgICAgICAgICAgc2VsZWN0KE5BTUUsTkFNRV9GVUxMLEdFT0lENixDT01NVU5JVFlfRlVMTCxDT01NVU5JVFksZXZlcnl0aGluZygpKSAlPiUgCiAgICAgICAgICAgICAgICB1bmdyb3VwICU+JSAKICAgICAgICAgICAgICAgIHN0X2FzX3NmKCkKICAgICAgICAKICAgICAgICBjb21tcyA8LQogICAgICAgICAgICAgICAgYWNzX25vcm1sX2NvbW1zX3NmICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcighaXMubmEoQ09NTVVOSVRZKSkgJT4lIAogICAgICAgICAgICAgICAgdW5jbGFzcyAlPiUgCiAgICAgICAgICAgICAgICBhc190aWJibGUgJT4lIAogICAgICAgICAgICAgICAgc2xpY2Vfcm93cygnQ09NTVVOSVRZJykgJT4lIAogICAgICAgICAgICAgICAgZG1hcChhZ2dyZWdhdGVfY29tbXMpICU+JSAKICAgICAgICAgICAgICAgIG11dGF0ZShnZW9tID0gc3Rfc2ZjKGdlb20pKSAlPiUgCiAgICAgICAgICAgICAgICBzdF9hc19zZigpCiAgICAgICAgCiAgICAgICAgYWxsX2NvbyA8LSAKICAgICAgICAgICAgICAgIGFjc19ub3JtbF9jb21tc19zZiAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoIWlzLm5hKENPTU1VTklUWSkpICU+JSAKICAgICAgICAgICAgICAgIHVuY2xhc3MgJT4lIAogICAgICAgICAgICAgICAgYXNfdGliYmxlICU+JSAKICAgICAgICAgICAgICAgIGRtYXAoYWdncmVnYXRlX2NvbW1zKSAlPiUgCiAgICAgICAgICAgICAgICBtdXRhdGUoZ2VvbSA9IHN0X3NmYyhnZW9tKSkgJT4lIAogICAgICAgICAgICAgICAgc3RfYXNfc2YoKQogICAgICAgIAogICAgICAgIGFjc19ub3JtbF9hbGxfZ2VvbXNfc2YgPC0gCiAgICAgICAgICAgICAgICBsaXN0KGFjc19ub3JtbF9jb21tc19zZiwgY29tbXMsIGFsbF9jb28pICU+JSAKICAgICAgICAgICAgICAgIHJlZHVjZShyYmluZC5zZikgJT4lIAogICAgICAgICAgICAgICAgbXV0YXRlKEdFT0dSQVBIWSA9IGNhc2Vfd2hlbihpcy5uYSguJE5BTUUpICYgIWlzLm5hKC4kQ09NTVVOSVRZKSB+ICdjb21tdW5pdHknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgaXMubmEoLiRDT01NVU5JVFkpIH4gJ2NvbW11bml0aWVzIChtdWx0aXBsZSknLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJE5BTUUgJWluJSAnU0VBQ0NEJyB+ICdjb3VudHkgc3ViZGl2aXNpb24nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuJE5BTUUgJWluJSAnS0MnIH4gJ2NvdW50eScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAndHJhY3QnKSkgJT4lIAogICAgICAgICAgICAgICAgbXV0YXRlKE5BTUUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm5hKC4kTkFNRSkgJiAuJEdFT0dSQVBIWSAlaW4lICdjb21tdW5pdGllcyAobXVsdGlwbGUpJyB+ICdDT08nLAogICAgICAgICAgICAgICAgICAgICAgICBpcy5uYSguJE5BTUUpICYgLiRDT01NVU5JVFkgJWluJSAnUlYnIH4gLiRDT01NVU5JVFksCiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm5hKC4kTkFNRSkgJiAuJENPTU1VTklUWSAlaW4lICdXQycgfiAuJENPTU1VTklUWSwKICAgICAgICAgICAgICAgICAgICAgICAgaXMubmEoLiROQU1FKSAmIC4kQ09NTVVOSVRZICVpbiUgJ1NUS1cnIH4gLiRDT01NVU5JVFksCiAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAuJE5BTUUpKSAlPiUgCiAgICAgICAgICAgICAgICBtdXRhdGUoTkFNRV9GVUxMID0gY2FzZV93aGVuKAogICAgICAgICAgICAgICAgICAgICAgICAuJE5BTUUgJWluJSAnQ09PJyB+ICdDb21tdW5pdGllcyBvZiBPcHBvcnR1bml0eScsCiAgICAgICAgICAgICAgICAgICAgICAgIC4kTkFNRSAlaW4lICdSVicgfiAnUmFpbmllciBWYWxsZXknLAogICAgICAgICAgICAgICAgICAgICAgICAuJE5BTUUgJWluJSAnV0MnIH4gJ1doaXRlIENlbnRlcicsCiAgICAgICAgICAgICAgICAgICAgICAgIC4kTkFNRSAlaW4lICdTVEtXJyB+ICdTZWFUYWMvVHVrd2lsYScsCiAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiAuJE5BTUVfRlVMTCkpICU+JSAKICAgICAgICAgICAgICAgIG11dGF0ZShHRU9HX0ZDVCA9IGZhY3RvcihHRU9HUkFQSFksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxzID0gYygndHJhY3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbW11bml0eScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29tbXVuaXRpZXMgKG11bHRpcGxlKScsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY291bnR5IHN1YmRpdmlzaW9uJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb3VudHknKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmRlcmVkID0gVFJVRSkpICU+JSAKICAgICAgICAgICAgICAgIHNlbGVjdChOQU1FOlNFQUNDRF9MR0wsR0VPR1JBUEhZLEdFT0dfRkNULGdlb20sbWF0Y2hlcygnMjAxNScpLG1hdGNoZXMoJzIwMDknKSkgCiAgICAgICAgCiAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgCiAgICAgICAgICAgICAgICB3cml0ZV9yZHMocm9vdF9maWxlKCcuLzEtZGF0YS80LWludGVyaW0vYWNzX25vcm1sX2FsbF9nZW9tc19zZi5yZHMnKSkKICAgICAgICAKfWVsc2V7CiAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiA8LSByZWFkX3Jkcyhyb290X2ZpbGUoJy4vMS1kYXRhLzQtaW50ZXJpbS9hY3Nfbm9ybWxfYWxsX2dlb21zX3NmLnJkcycpKQp9CgphY3Nfbm9ybWxfYWxsX2dlb21zX3NmICU+JSAKICAgICAgICBhcnJhbmdlKGZjdF9yZXYoR0VPR19GQ1QpKSAlPiUgCiAgICAgICAgc2VsZWN0KE5BTUU6R0VPR19GQ1QsZ2VvbSxtYXRjaGVzKCcyMDE1JyksbWF0Y2hlcygnMjAwOScpKSAlPiUgCiAgICAgICAgdW5jbGFzcyAlPiUgCiAgICAgICAgYXNfdGliYmxlKCkKCmBgYAoKIyMjIyBDb21tdW5pdHkgTWFwcwpgYGB7ciBjZW5zdXMtYWNzLWNvbW1zLW1hcCwgZmlnLmhlaWdodD0xLjI1LCBmaWcud2lkdGg9MSwgIGZpZy5zaG93PSdob2xkJywgZHBpPTE1MH0KCiMgUHJpbnQgQ29tbXVuaXR5IE1hcHMKCnNob3dfY29tbV9tYXAgPC0gZnVuY3Rpb24obm0sIGNvbG9yLCBmbG9hdF9kaXIpewogICAgICAgIAogICAgICAgICMgTWFwIENlbnRlcgogICAgICAgIAogICAgICAgIGNudHIgPC0gYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgCiAgICAgICAgICAgICAgICBmaWx0ZXIoR0VPR1JBUEhZICVpbiUgJ2NvbW11bml0aWVzIChtdWx0aXBsZSknKSAlPiUgCiAgICAgICAgICAgICAgICBzdF9jZW50cm9pZCgpICU+JSBzdF9iYm94KCkKICAgICAgICBsbmcgPC0gY250cltbJ3htaW4nXV0KICAgICAgICBsYXQgPC0gY250cltbJ3ltaW4nXV0KICAgICAgICAKICAgICAgICBjb21tX3NwIDwtIAogICAgICAgICAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgCiAgICAgICAgICAgICAgICBzZWxlY3QoZXZlcnl0aGluZygpLC1tYXRjaGVzKCcyMDE1fDIwMDknKSkgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKEdFT0dSQVBIWSAlaW4lICd0cmFjdCcgJiBDT01NVU5JVFkgJWluJSBubSkgJT4lIAogICAgICAgICAgICAgICAgYXMoIlNwYXRpYWwiKQogICAgICAgIAogICAgICAgIGNvbW1fY250X3NwIDwtIAogICAgICAgICAgICAgICAgYWNzX25vcm1sX2FsbF9nZW9tc19zZiAlPiUgCiAgICAgICAgICAgICAgICBzZWxlY3QoZXZlcnl0aGluZygpLC1tYXRjaGVzKCcyMDE1fDIwMDknKSkgJT4lIAogICAgICAgICAgICAgICAgZmlsdGVyKEdFT0dSQVBIWSAlaW4lICdjb21tdW5pdHknICYgQ09NTVVOSVRZICVpbiUgbm0pICAlPiUgCiAgICAgICAgICAgICAgICBtdXRhdGUoZ2VvbSA9IHN0X2NlbnRyb2lkKGdlb20pKSAlPiUKICAgICAgICAgICAgICAgIGFzKCJTcGF0aWFsIikKICAgICAgICAKICAgICAgICBjb21tX2JvdW5kc19zcCA8LSAKICAgICAgICAgICAgICAgIGFjc19ub3JtbF9hbGxfZ2VvbXNfc2YgJT4lIAogICAgICAgICAgICAgICAgc2VsZWN0KGV2ZXJ5dGhpbmcoKSwtbWF0Y2hlcygnMjAxNXwyMDA5JykpICU+JSAKICAgICAgICAgICAgICAgIGZpbHRlcihHRU9HUkFQSFkgJWluJSAnY29tbXVuaXR5JyAmIENPTU1VTklUWSAlaW4lIG5tKSAgJT4lCiAgICAgICAgICAgICAgICBhcygiU3BhdGlhbCIpICU+JSAKICAgICAgICAgICAgICAgIGFzKCJTcGF0aWFsTGluZXMiKQogICAgICAgIAogICAgICAgIGNvbW1fc3AgJT4lIAogICAgICAgICAgICAgICAgbWlzY2dpczo6bXlMZmx0R3JleSgpICU+JQogICAgICAgICAgICAgICAgbXlMZmx0T3B0cyh0aWxlTGFiZWxzID0gRkFMU0UsIGZ1bGxTY3JlZW5CdG4gPSBGQUxTRSwgYnVtcFRpbGVMYWJlbHMgPSBGQUxTRSkgJT4lIAogICAgICAgICAgICAgICAgYWRkUG9seWdvbnMoc21vb3RoRmFjdG9yID0gMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gY29sMmhleCgid2hpdGUiKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdlaWdodCA9IC41LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsQ29sb3IgPSBjb2xvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGxPcGFjaXR5ID0gLjY1CiAgICAgICAgICAgICAgICApICU+JSAKICAgICAgICAgICAgICAgIGFkZFBvbHlsaW5lcyhkYXRhID0gY29tbV9ib3VuZHNfc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsbE9wYWNpdHkgPSAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yID0gcHJval9kYXJrX2dyZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BhY2l0eSA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2VpZ2h0ID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbW9vdGhGYWN0b3IgPSAwKSAlPiUKICAgICAgICAgICAgICAgIGFkZEF3ZXNvbWVNYXJrZXJzKGRhdGEgPSBjb21tX2NudF9zcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMgPSBtYXJrZXJPcHRpb25zKG9wYWNpdHkgPSAwKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsID0gfiBOQU1FX0ZVTEwsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWxPcHRpb25zID0gbGFiZWxPcHRpb25zKG5vSGlkZSA9IFRSVUUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gYygwLDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdGlvbiA9ICdhdXRvJywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dE9ubHkgPSBUUlVFKSkgJT4lIAogICAgICAgICAgICAgICAgc2V0VmlldyhsbmcsbGF0LHpvb20gPSA5KSAlPiUgCiAgICAgICAgICAgICAgICBtaXNjZ2lzOjpzdHlsZVdpZGdldChzdHlsZSA9IHBhc3RlMCgiZmxvYXQ6IixmbG9hdF9kaXIsIjttYXJnaW46MXB4IikpICU+JSAKICAgICAgICAgICAgICAgIHByaW50KCkKfQoKbmFtZXMgPC0gYygnUlYnLCdXQycsJ1NUS1cnKQoKY29sb3JzIDwtIGMoYmx1ZSwgZ3JlZW4sIHJlZCkKCmZsb2F0X2RpcnMgPC0gYygnbGVmdCcsJ2xlZnQnLCdub25lJykKCnB3YWxrKGxpc3QobmFtZXMsIGNvbG9ycywgZmxvYXRfZGlycyksc2hvd19jb21tX21hcCkKCgpgYGAK